import { IPSModelObject } from '../ipsmodel-object';
import { IPSSysSFPlugin } from '../res/ipssys-sfplugin';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSSubSysServiceAPIMethod
 */
export interface IPSSubSysServiceAPIMethod extends IPSModelObject {
  /**
   * 执行之后调用脚本
   * @type {string}
   */
  afterCode: string;

  /**
   * 请求内容类型
   * @description 值模式 [服务请求内容类型（外部接口使用）] {application/json：application/json、 application/x-www-form-urlencoded：application/x-www-form-urlencoded、 multipart/form-data：multipart/form-data、 text/xml：text/xml、 USER：用户自定义、 USER2：用户自定义2、 USER3：用户自定义3、 USER4：用户自定义4 }
   * @type {( string | 'application/json' | 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/xml' | 'USER' | 'USER2' | 'USER3' | 'USER4')}
   */
  bodyContentType: string | 'application/json' | 'application/x-www-form-urlencoded' | 'multipart/form-data' | 'text/xml' | 'USER' | 'USER2' | 'USER3' | 'USER4';

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 代码名称2
   * @type {string}
   */
  codeName2: string;

  /**
   * 方法参数
   * @type {string}
   */
  methodParam: string;

  /**
   * 方法参数2
   * @type {string}
   */
  methodParam2: string;

  /**
   * 方法调用脚本代码
   * @type {string}
   */
  methodScriptCode: string;

  /**
   * 方法标记
   * @type {string}
   */
  methodTag: string;

  /**
   * 方法标记2
   * @type {string}
   */
  methodTag2: string;

  /**
   * 方法类型
   * @description 值模式 [实体服务接口成员类型] {DEACTION：实体行为、 FETCH：实体数据集合、 SELECT：实体数据查询（SELECT）、 FETCHTEMP：实体数据集合（临时）、 SELECTTEMP：实体数据查询（SELECT）（临时）、 USER：用户自定义、 USER2：用户自定义2、 USER3：用户自定义3、 USER4：用户自定义4 }
   * @type {( string | 'DEACTION' | 'FETCH' | 'SELECT' | 'FETCHTEMP' | 'SELECTTEMP' | 'USER' | 'USER2' | 'USER3' | 'USER4')}
   */
  methodType: string | 'DEACTION' | 'FETCH' | 'SELECT' | 'FETCHTEMP' | 'SELECTTEMP' | 'USER' | 'USER2' | 'USER3' | 'USER4';

  /**
   * 实体代码名称
   * @type {string}
   */
  psDECodeName: string;

  /**
   * 实体代码名称
   * @type {string}
   */
  getPSDECodeName(): string;

  /**
   * 实体逻辑名称
   * @type {string}
   */
  psDELogicName: string;

  /**
   * 实体逻辑名称
   * @type {string}
   */
  getPSDELogicName(): string;

  /**
   * 实体名称
   * @type {string}
   */
  psDEName: string;

  /**
   * 实体名称
   * @type {string}
   */
  getPSDEName(): string;

  /**
   * 后端扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 请求属性
   * @type {string}
   */
  requestField: string;

  /**
   * 请求方式
   * @description 值模式 [REST请求方式] {GET：GET、 HEAD：HEAD、 POST：POST、 PUT：PUT、 PATCH：PATCH、 DELETE：DELETE、 OPTIONS：OPTIONS、 TRACE：TRACE }
   * @type {( string | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'TRACE')}
   */
  requestMethod: string | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'TRACE';

  /**
   * 参数类型
   * @description 值模式 [服务请求参数类型] {NONE：无参数、 FIELD：指定属性、 FIELDS：指定属性数组、 ENTITY：数据对象、 ENTITIES：数据对象数组、 OBJECT：其它对象、 OBJECTS：其它对象数组 }
   * @type {( string | 'NONE' | 'FIELD' | 'FIELDS' | 'ENTITY' | 'ENTITIES' | 'OBJECT' | 'OBJECTS')}
   */
  requestParamType: string | 'NONE' | 'FIELD' | 'FIELDS' | 'ENTITY' | 'ENTITIES' | 'OBJECT' | 'OBJECTS';

  /**
   * 请求路径
   * @type {string}
   */
  requestPath: string;

  /**
   * 返回值类型
   * @description 值模式 [实体行为返回值类型] {VOID：无（void）、 SIMPLE：简单值、 SIMPLES：简单值数组、 ENTITY：数据对象（Entity）、 ENTITIES：数据对象数组（Entity[]）、 OBJECT：其它对象（Object）、 OBJECTS：其它对象数组（Object[]）、 LINKENTITY：外部数据对象（Entity）、 LINKENTITIES：外部数据对象数组（Entity[]）、 ASYNCACTION：异步操作对象、 SSE：服务器端事件对象（SSE）、 USER：用户自定义（USER）、 USER2：用户自定义2（USER2） }
   * @type {( string | 'VOID' | 'SIMPLE' | 'SIMPLES' | 'ENTITY' | 'ENTITIES' | 'OBJECT' | 'OBJECTS' | 'LINKENTITY' | 'LINKENTITIES' | 'ASYNCACTION' | 'SSE' | 'USER' | 'USER2')}
   */
  returnValueType: string | 'VOID' | 'SIMPLE' | 'SIMPLES' | 'ENTITY' | 'ENTITIES' | 'OBJECT' | 'OBJECTS' | 'LINKENTITY' | 'LINKENTITIES' | 'ASYNCACTION' | 'SSE' | 'USER' | 'USER2';

  /**
   * 自动计算路径
   * @type {boolean}
   * @default false
   */
  autoPath: boolean;

  /**
   * 独立输出资源键值
   * @type {boolean}
   * @default false
   */
  needResourceKey: boolean;

  /**
   * 无服务代码标识
   * @type {boolean}
   * @default false
   */
  noServiceCodeName: boolean;
}
